2 Lexical Conventions
When the processing of XX is complete, the program has been reduced to a sequence of tokens. LGA uses a series of token-matching regexes to attempt matches against the beginning of the source code.

2.1 Tokens
Tokens in LGA are in this form [tag, value, locationdata], where locationdata is in this form {first_line, first_column, last_line, last_column}.

There are six classes of tokens: identifiers, keywords, constants, string literals, operators, and other separators. Blanks, horizontal and vertical tabs, newlines, formfeeds and comments as described below (collectively, ``white space'') are ignored except as they separate tokens. Some white space is required to separate otherwise adjacent identifiers, keywords, and constants.
2.2 Comments

One line with only the characters “###” introduces a comment, which terminates with another line with only the characters ###. Comments do not nest, and they do not occur within a string or character literals.
There are also single-line comments that start with the character ‘#’ and end by the end of the line.

2.3 Identifiers
An identifier is a sequence of letters and digits. The first character must be a letter, the underscore _ counts as a letter. Upper and lower case letters are different.

2.4 Keywords
The following identifiers are reserved for the use as keywords, and may not be used otherwise. These include the superset of both JavaScript keywords and reserved words. 

Keywords that LGA shared in common with JaveScript:

'true', 'false', 'null', 'this' , 'new', 'delete', 'typeof', 'in', 'instanceof' , 'return', 'throw', 'break', 'continue', 'debugger' , 'if', 'else', 'switch', 'for', 'while', 'do', 'try', 'catch', 'finally' , 'class', 'extends', 'super'

LGA-Only keywords:
'undefined', 'then', 'unless', 'until', 'loop', 'of', 'by', 'when'
2.5 Constants
2.5.1 Boolean Constants
The Boolean data type can have two types: true and false.

2.5.2 Number Constants
In LGA, there is no distinction between integer and floating-point values; a number constant can be either. An integer constant consisting of a sequence of digits is taken to be octal if it begins with 0 (digit zero), decimal otherwise. A floating constant consists of an integer part, a decimal part, a fraction part, an e or E, an optionally signed integer exponent and an optional type suffix, one of f, F, l, or L. The integer and fraction parts both consist of a sequence of digits. Either the integer part, or the fraction part (not both) may be missing; either the decimal point or the e and the exponent (not both) may be missing.
2.5.2 String Constants
A string constant is a sequence of characters surrounded by double quotes. Double quotation marks can be contained in strings surrounded by single quotation marks, and single quotation marks can be contained in strings surrounded by double quotation marks.
2.6 Operators
Computational operators:
‘+’, ‘-‘, ‘*’, ‘/’, ‘%’, ‘++’, ‘—‘

Compound assignment tokens:
'-=', '+=', '/=', '*=', '%=', '||=', '&&=', '?=', '<<=', '>>=', '>>>=', '&=', '^=', '|='

Unary tokens:
'!', '~', 'NEW', 'TYPEOF', 'DELETE', 'DO'

Logical tokens:
'&&', '||', '&', '|', '^'

Bit-shifting tokens:
'<<', '>>', '>>>'

Comparison tokens:
'==', '!=', '<', '>', '<=', '>='

Mathematical tokens:
'*', '/', '%'

Relational tokens that are negatable with not prefix:
'IN', 'OF', 'INSTANCEOF'

Tokens which a regular expression will never immediately follow, but which a division operator might:
'NUMBER', 'REGEX', 'BOOL', 'NULL', 'UNDEFINED', '++', '--'

